/*
 * Singleton.cc
 *
 *  Created on: Mar 30, 2011
 *      Author: s146009
 */

#include "Singleton.h"
#include "assert.h"

Singleton* Singleton::pinstance = 0;//init pointer
Singleton* Singleton::instance() {
	if (pinstance == 0) { // is it the first call?
		pinstance = new Singleton();
		// create sole instance
	}
	return pinstance; // address of sole instance
	// created in the first call
	// -> lazy initialization
}
Singleton::Singleton() {
	//... perform necessary instance initializations
	beschikbareKaarten = new list<int> ();
}

Singleton::~Singleton(){
assert(pinstance!=0);
	pinstance = 0;
	beschikbareKaarten->erase(beschikbareKaarten->begin(),beschikbareKaarten->end());
	delete beschikbareKaarten;
}

void Singleton::maakBonnen(int i) {
	assert(i!=0);

	for (int j = 0; j < i; j++) {
		beschikbareKaarten->push_back(j);
		cout << "bon: " << j << " toegevoegd en beschikbaar" << endl;
	}

}

bool Singleton::checkBon(int i) {

	assert(beschikbareKaarten->size() !=0);
	bool gevonden = false;
	for (list<int>::iterator iter = beschikbareKaarten->begin(); iter != beschikbareKaarten->end(); ++iter) {
		if (*iter == i)
			gevonden = true;
	}
	return gevonden;
}
void Singleton::verwijderbon(int i) {
	assert(beschikbareKaarten->size() !=0);
	if (checkBon(i)) {
		beschikbareKaarten->remove(i);
		cout << "bon verwijderd "<< i <<" en niet meer beschikbaar" << endl;
	} else {
		cout << "bon niet gevonden" << endl;
	}
}

void Singleton::printHuidigeBonnen() {
	if (beschikbareKaarten->size() != 0) {
		cout << "Gevonden bonnen:" << endl;
		for (list<int>::iterator iter = beschikbareKaarten->begin(); iter != beschikbareKaarten->end(); ++iter) {
			cout << "bon:" << *iter << endl;
		}
	}
	else
	{
		cout << "Er zijn geen bonnen gevonden die kunnen uitgedeeld worden." << endl;
	}
}

Singleton* Singleton::getInstance(){
	return pinstance;
}

list<int>* Singleton::getBonnenList(){
	return beschikbareKaarten;
}
